12. 新しいブラウザ機能
Deno
https://gyazo.com/95e410e517c0b67e33b8e13852847975
クラウドIDE
ブラウザ上で動くIDE
CodeSandbox
Cloud9
もうソフト開発もクラウド上でやる時代?
CodeSandbox
https://www.youtube.com/watch?v=z02Zg7zFpoc
Amazon Cloud9
https://www.youtube.com/watch?v=_xpzCzQZ-b8
https://aws.amazon.com/jp/campaigns/manga/vol2-1/ https://gyazo.com/07a4db77912f71769e0b3fcbf3378349
レポート課題
ブラウザの新機能
画面描画
マルチメディア
ローカルファイル
どんなアプリでも作れるようになった
昔のブラウザ
× 描画
× 動画
× 音
× CG
× 通信
× ファイル操作
ブラウザの新機能
HTML5
WebGL
WebCL
Web Audio API
Web MIDI API
HTTP/2
HTML5
http://gyazo.com/1042666f281f44e8b223f445e47babd2.png
HTML5の機能
セマンティックス
新タグ, RDFa, マイクロデータ, マイクロフォーマット
オフラインとストレージ
App Cache, Web Storage, Indexed Database API, File API
デバイスアクセス
Geolocation API, マイク, カメラ, アドレス帳, カレンダー, 端末の向き
接続性
WebSocket, Server-Sent Events
マルチメディア
audio/video要素
3D、グラフィックス、エフェクト
SVG, canvas要素, WebGL, CSS3 3D
パフォーマンスと統合
Web Workers, XMLHttpRequest Level 2
CSS3
WOFF
HTML5の機能
Video/Audio
Canvas, SVG
レイアウト/構造化タグ
新しいInput
File API
ドラッグ&ドロップ
マイクロデータ
Web Worker
App Cache
Web Storage
WebSocket
Geolocation API
XMLHttpRequest Level 2
WebRTC
Video/Audio
<audio>タグ
<video>タグ
Videoタグ
<video src="sample.mp4"></video>
http://masui.org.s3.amazonaws.com/7/7/773a108d3ba8e8e0a82aba51861e82ad.mp4
CanvasとSVG
http://gyazo.com/622066eb8dbcdbe57aae904182981bfa.png
Canvasの例
http://gyazo.com/d8e1099d4bacfbb00a1e2e25ee9edae8.png
SVGの例 - D3.js
http://gyazo.com/365e08f7a80fcdf574afe3843a1f2ced.png
SVGの例 - SDraw
http://www.pitecan.com/tmp/SDraw/sdraw.html http://gyazo.com/8404a22e439dd6f9bef8b13f9c763624.png
D3.jsを利用
レイアウトタグ
<header> <footer>
<section>
<nav>
スライダ
色選択
時刻入力
...
スライダ
code:slider.html
<form action="xxx.php" method="post">
<label>レンジ(type="range"):<input type="range" name="range"></label>
<input type="submit" value="送信">
</form>
https://gyazo.com/a50c97fd2777d685d058c50811f637f1
色選択
code:html
<!DOCTYPE html>
<html>
<body>
<form action="demo_form.asp">
Select your favorite color: <input type="color" name="favcolor" /><br />
<input type="submit" />
</form>
</body>
</html>
http://gyazo.com/292fa5d2ebe9312b07ef8a148c37597c.png
File API
ローカルファイルの読み書き
ドラッグ&ドロップ
ブラウザ内のドラッグ&ドロップ
ブラウザ外からのドラッグ&ドロップ
File APIを利用
マイクロデータ
独自の語彙から構成される名前と値のペアによって、あるスコープ内のDOMを意味付けする仕組み
HTML内で話題にしている人名/作品/商品などと言ったメタデータを、コンピュータが容易に認識出来るようにマークアップしたもの
Web Worker
JSをバックグラウンドで走らせる
マルチスレッドで動作可能
マルチコアCPUだとJSでも高速計算可能になる
pushState
操作履歴をセーブ
サーバと通信せずにURL状態を変えられる
Ajaxで「戻るボタン」を実装できる
サーバとの自由な通信
Cometなどを利用しなくてすむ
Node.jsで簡単に利用可能
socket.ioライブラリを利用
サーバからのイベントとブラウザからのイベントが対称
App Cache
HTML/CSS /JavaScriptをローカルにキャッシュ
manifestファイルを使う
Web Storage
ブラウザにデータをKVSで保存
ローカルストレージ
ウィンドウが開いている間だけ有効
セッションストレージ
永続的に保存
ChromeStorage
拡張機能のデータストレージ
ブラウザ内にデータが保存される
chrome.storage.local.set
Indexed Database API
NoSQLなデータベース
Geolocation API
ユーザの位置情報を扱う
無線LAN・WiFi・携帯電話基地局・GPS・IPアドレスなどから位置情報を取得
GeoAPI sample
code:geoapi.html
<html lang="ja">
<head>
<meta charset=utf-8>
<script>
//ユーザーの現在の位置情報を取得
navigator.geolocation.getCurrentPosition(successCallback, errorCallback);
function successCallback(position) {
position.coords.latitude + "," +
position.coords.longitude;
location.href = mapsurl;
}
function errorCallback(error) {
var err_msg = "";
switch(error.code)
{
case 1:
err_msg = "位置情報の利用が許可されていません";
break;
case 2:
err_msg = "デバイスの位置が判定できません";
break;
case 3:
err_msg = "タイムアウトしました";
break;
}
document.getElementById("show_result").innerHTML = err_msg;
}
</script>
<title>Geolocation API サンプル</title>
</head>
<body>
<p>あなたの現在位置</p>
<div id="show_result"></div>
</body>
</html>
Geolocation API
getCurrentPosition()
ユーザーの現在の位置情報を一回だけ取得する
watchPosition()
ユーザーの位置情報を定期的に監視する
clearWatch()
watchPosition()による位置情報の監視をクリアする
XMLHttpRequest Level 2
クロスドメイン対応
Webで使えるフォント
無料で利用可能
Webフォントの利用
小杉丸ゴシックの利用
CSSに書くだけで使える
code:style.css
font-family: helvetica, arial, "Kosugi Maru", sans-serif ;
}
WebRTC
ブラウザでWebカメラを使う
http://gyazo.com/40acad6ef966289f059bbc54a693edfa.png
http://gyazo.com/6268457a183fc00cc587ec4151e9c835.png
ブラウザ上でOpenGLで3Dグラフィクス描画
GLとは?
SGI(Silicon Graphics)が作成した3次元ライブラリ
SGIのワークステーション(IRIX)で動作
GLプログラム例
http://gyazo.com/c6f572c70aca7068c3078bbd36996f46.png
OpenGL
GLを様々なマシンで使えるようにしたもの
Linux
Windows
Mac
ウィンドウ処理、マウス処理などは含まない
システム依存するため
WebGL
OpenGLをブラウザ上で動かす
GPUのOpenGLを直接アクセス
https://cvs.khronos.org/svn/repos/registry/trunk/public/webgl/sdk/demos/webkit/SpinningBox.html http://gyazo.com/2b2d731b33eefbc423c30b28e0b8c3ee.png
Source
http://gyazo.com/4c2193c5acb673ffad2088117b779623.png
https://gyazo.com/109ffc512ac1529068921545095db984
https://gyazo.com/4afc96a4a5fbd15fd610f97636dbd740.png
WebGL サンプル
JavaScriptのライブラリ
3Dゲームなどを簡単に作れる
GLSL
WebGLの「シェーダ」言語
C言語
WebGLの将来
最近はどこでも動く
Canvasより高速
情報視覚化にもっと活用されるべき
GPUをブラウザから利用
OpenCLのブラウザ版
OpenCL
マルチコア、GPUなどの異種混合並列計算フレームワーク
NVIDIAのCUDAに対してAppleが提案
CUDA
NVIDIAのGPUを利用するCライブラリ
GPGPUのためのもの
GPGPU
General-purpose computing on graphics processing units
= GPUによる汎目的計算
ブラウザで音を扱う
http://www.google.com/doodles/robert-moogs-78th-birthday?doodle=6201726XDBA74MzMMlMzN0pmZthmZn8AAAMRmZnyAAANQAAB6pmZs3__-3-2E8aZmbTPP__9lPUzMz2n7___YzzpmZhzlphik5hglphhFphkEFhhFoRmFJhhFphmklhnFphhFphkFkhlEkhlE4hlFphkklBmV0hjFphmFJhhFIhkFIhjEYhlFphh-A.. http://gyazo.com/d9a312912bf3f85cf26cfd870f39c5ba.png
audioタグ
code:audio.html
<audio controls autoplay>
<source src="sample.mp3" type="audio/mp3">
<source src="sample.ogg" type="audio/ogg">
<source src="sample.m4a" type="audio/aac">
このWebブラウザーは音声の再生に対応していません。
</audio>
Audioオブジェクトでドラム
http://www11.plala.or.jp/sothicblue/html5drum/ http://gyazo.com/fa6af9ea506b095cc091169795099574.png
Web MIDI API
http://gyazo.com/02ab57fcdfc2bbe73de951a9b3dc1853.png
MIDIギターをブラウザに接続
ブラウザから音を出す
ブラウザでグラフィクス表示
現在のところChromeのみで動作?
ブラウザで自力で音を出す
Firefox Audio API
終了
Web Audio API
Chrome, Safari
https://www.youtube.com/watch?v=oJ1UsLoPX3E
Web Audio APIが標準になったので終了
Audio Data APIで音を鳴らす
code:la.html
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
<script type="text/javascript">
var SAMPLE_RATE = 44100;
var audio = new Audio();
audio.volume = 1; // 0〜1
audio.mozSetup(2, SAMPLE_RATE); // チャネル数2, サンプリングレート44100
var buffer = new Float32Array(SAMPLE_RATE*2);
var freq = 440;
var k = 2* Math.PI * freq / SAMPLE_RATE;
for(var i = 0, n = buffer.length; i < n; i++){
bufferi = Math.sin(k * i); }
audio.mozWriteAudio(buffer);
</script>
</head>
<body>
</body>
</html>
http://editors.ascii.jp/m-kobashigawa/web-tips/labo/audioapi/sample07/ http://gyazo.com/bdd3ef949cda0e7d4a29d764ec827efc.png
http://gyazo.com/12002ec01b824bdaec597211226a69db.png
リアルタイムに音生成
最近の標準
g200kg氏
汎用シンセサイザを作れる
https://gyazo.com/0f76d5c5d450e666ac64d2422defc6de https://g200kg.github.io/webaudio-tinysynth/soundedit.html
http://gyazo.com/1cb0a58b6a1d32a4642ed007715e819a.png
http://gyazo.com/e8f932ab10faadfd35f375450b9dab4b.png
WebMidiLink
ブラウザ楽器を接続
http://mohayonao.github.com/timbre/ http://gyazo.com/bddfcead78e96f24e3ae3d38c24de272.png
Web Audio APIなどに皮をかぶせたもの
http://gyazo.com/2640cfa84203180c33ec39f187b50a5d.png
Timbreデモ
JSで波形をつくる
jsfxによるドラムシーケンサ
http://www11.plala.or.jp/sothicblue/html5drum-jsfx/ http://gyazo.com/690ffed3fe34f9fa40d376b4de9a096b.png
まとめ
ブラウザで何でもできるようになった
HTML
WebGL
WebCL
サウンドライブラリ
普通のアプリはどうなるか?